home *** CD-ROM | disk | FTP | other *** search
- /******************************************************************************
- * trackball.h
- ******************************************************************************
- *
- * Purpose:
- * Descriptional text.
- *
- * Authors:
- * Michael Teschner and Christian Henn
- *
- * Note:
- * None.
- *
- * Revisions:
- * 10.11.93 micha Created file.
- *
- ******************************************************************************
- *
- * COPYRIGHT (C) 1992, 1993, 1994
- *
- * BY CHRISTIAN HENN M.E. MUELLER-INSTITUTE FOR MICROSCOPY (MIM)
- * HENN@COMP.BIOZ.UNIBAS.CH CH-4056 BASEL, SWITZERLAND
- *
- * AND MICHAEL WALDHERR-TESCHNER SILICON GRAPHICS INDUSTRIES (SGI)
- * MICHA@BASEL.SGI.COM CH-4125 RIEHEN, SWITZERLAND
- *
- ******************************************************************************
- *
- * PERMISSION TO USE, COPY, MODIFY AND DISTRIBUTE THIS SOFTWARE AND ITS DOCU-
- * MENTATION FOR THE PURPOSE OF RESEARCH, DEVELOPMENT AND EDUCATION IS HEREBY
- * GRANTED FREE OF CHARGE, SUBJECT TO THE FOLLOWING RESTRICTIONS:
- *
- * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, EXPRESS,
- * IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF DESIGN,
- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, OR ARISING FROM A
- * COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- *
- * IN NO EVENT SHALL SILICON GRAPHICS OR THE M.E. MUELLER-INSTITUTE BE LIABLE
- * FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
- * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
- * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
- * THIS SOFTWARE.
- *
- ******************************************************************************
- */
- /*
- * Xtrackball.h
- * A virtual trackball implementation
- * Written by Gavin Bell for Silicon Graphics, November 1988.
- *
- * modified by Michael Teschner SGI Basel
- * 1992
- */
-
- /*
- * NOTE: If, for some reason, gl.h shouldn't be included, one could
- * just define the Matrix type, like so:
- * typedef float Matrix[4][4];
- */
- #include <gl/gl.h>
-
- /*
- * Pass the x and y coordinates of the last and current positions of
- * the mouse, scaled so they are from (-1.0 ... 1.0).
- *
- * if ox,oy is the window's center and sizex,sizey is its size, then
- * the proper transformation from screen coordinates (sc) to world
- * coordinates (wc) is:
- * wcx = (2.0 * (scx-ox)) / (float)sizex - 1.0
- * wcy = (2.0 * (scy-oy)) / (float)sizey - 1.0
- *
- * For a really easy interface to this see 'ui.h'.
- */
- void trackball(float *e, float p1x, float p1y, float p2x, float p2y);
-
- /*
- * Given two sets of Euler paramaters, add them together to get an
- * equivalent third set. When incrementally adding them, the first
- * argument here should be the new rotation, the secon and third the
- * total rotation (which will be over-written with the resulting new
- * total rotation).
- */
- void add_eulers(float *e1, float *e2, float *dest);
-
- /*
- * A useful function, builds a rotation matrix in Matrix based on
- * given Euler paramaters.
- */
- void build_rotmatrix(Matrix m, float *e);
-
- /*
- * This function computes the Euler paramaters given an xyz axis (the
- * first argument, 3 floats) and angle (expressed in radians, the
- * second argument). The result is put into the third argument, which
- * must be an array of 4 floats.
- */
- void axis_to_euler(float *a, float phi, float *e);
-
-
- /** originally from vect.h **/
-
- /*
- * Definition for vector math. Vectors are just arrays of 3 floats.
- */
-
- #ifndef VECTDEF
- #define VECTDEF
-
- #ifndef _POLY9
- #include <math.h>
- #endif
-
- float *vnew(void);
- float *vclone(float *v);
- void vcopy(float *v1, float *v2);
- void vprint(float *v);
- void vset(float *v, float x, float y, float z);
- void vzero(float *v);
- void vnormal(float *v);
- float vlength(float *v);
- void vscale(float *v, float div);
- void vmult(float *src1, float *src2, float *dst);
- void vadd(float *src1, float *src2, float *dst);
- void vsub(float *src1, float *src2, float *dst);
- void vhalf(float *v1, float *v2, float *half);
- float vdot(float *v1, float *v2);
- void vcross(float *v1, float *v2, float *cross);
- void vdirection(float *v1, float *dir);
- void vreflect(float *in, float *mirror, float *out);
- void vmultmatrix(float m1[][4], float m2[][4], float prod[][4]);
- void vtransform(float *v, float mat[][4], float *vt);
- #endif /*VECTDEF */
-
- /**** extension by michael teschner ***/
-
- /* was for GL */
-
- long track_window;
-
- float g_tx, g_ty, g_tz;
- long w_xsiz, w_ysiz, w_ox, w_oy, cx,cy;
-
-
- float or_x, or_y, or_z;
- float mat[4][4],spr[4],r[4];
- float rmat[4][4];
- float imat[4][4];
- float gr_sca ;
-
- float p1x,p1y,p2x,p2y;
- long omx,omy,nmx,nmy;
-
- void trackball(float *r,float p1x,float p1y, float p2x, float p2y);
- void u_to_wo(long sx, long sy, float *wx, float *wy);
-
- /* clipping planes */
-
- float cp_xr, cp_yr, cp_tr, cp_dt;
-
- /** new for mixed model -> X */
-